"""
正则表达式 是一种匹配字符串的工具，用来做数据校验，网页标签爬虫规则，数据筛选、数据爬取等方面。

想使用正则表达式 要先导入re库
"""
#导入正则库 导入正则模块
import re

#1.匹配多种可能 使用[]
# 在一个字符串中 查找 run 或者 ran        将可能的字符串放到[]      r[ua]n
#                正则的规则    字符串
res = re.search(r'r[ua]n',"dog runs to cat")# 在 dog runs to cat 去查找 run或ran
print("1:",res) #span=(4, 7)要查找的字符串的索引范围, match='run'最终匹配的结果

res = re.search(r'r[ua]n',"dog rans to cat")#没有匹配到结果 返回为None
print("2：",res)
# 规则为 rA-Zn
res = re.search(r'r[A-Z]n',"dog rans to cat")#没有匹配到结果 返回为None
print("3：",res)
# 规则为 ra-zn
res = re.search(r'r[a-z]n',"dog rans to cat")
print("4",res)
#规则为 r0到9和a到zn    r2n  rkn  r3n   r2kn:None
res = re.search(r'r[0-9a-z]n',"dog rans to cat")# []里面的规则的结果 最终结果只能是一个字符，多个结果就要写多少[]
print("5",res)


# 2.匹配数字 \d 和 \D
# \d 表示一切数字
# \D 表示一切不是数字
res = re.search(r'r\dn',"run r9n")
print("6:",res)
res = re.search(r'r\Dn',"run r9n")
print("7:",res)

# 3.匹配空白 \s 和 \S
#  \s 一切空白的东西 [ \t(一个制表符 Tab)  \n(换车)   \f(换页) \r(换车) ]
#  \S 一切非空白的东西
res = re.search(r'r\sn',"r n r9n")
print("8:",res)
res = re.search(r'r\Sn',"r\nn r9n")
print("9:",res)

#4.匹配所有字母、数字和_
#\w 表示一切字母 数字 _
#\W 表示不是字母 数字 _
res = re.search(r'r\wn',"r n r9n")
print("10:",res)
res = re.search(r'r\Wn',"r\nn r9n")
print("11:",res)

#5.匹配 \ 和 任意字符
# runs\
#res = re.search(r'runs\\',"dog runs\ to cat")
print("12:",res)
#匹配r任意字符串ns
res = re.search(r'r.ns',"dog r;ns to cat")
print("13：",res)

#6.匹配零次或者多次 *
res = re.search(r'ab*','a')
print("14：",res)
res = re.search(r'ab*','abbbbbbbcccc')
print("15：",res)

#6.匹配一次或者多次 +
res = re.search(r'ab+','a')
print("16：",res)
res = re.search(r'ab+','abbbbbbbcccc')
print("17：",res)

#6.可选匹配次数 {n,m}
res = re.search(r'ab{1,10}','a')
print("18：",res)
res = re.search(r'ab{1,10}','abbbbbbbbbbbbbbbbbbbbbbbbcccc')
print("19：",res)# 结果 最多就是10个b

#7.替换匹配内容 sub()
res = re.sub('runs','走','dog runs to cat')# 将runs替换为走
print("20:",res)

#8.查找所有符合规则 findall
res = re.findall(r'r[ua]n','run ran ren')
print("21:",res)
#另外一种写法
res = re.findall(r'(run|ran)','run ran ren')
print("22:",res)

#9.拆分、分割 splict
res = re.split(r'[,;\.\\]',"a,b;c.d\e")
print("23:",res)